home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MacWorld 1999 January - Disc 2
/
Macworld (1999-01) (Disk 2).dmg
/
Serious Demos
/
Symbolic Composer 4.2
/
Environment
/
System
/
CADAR
/
Symbols
/
Chords
/
hindemith-chord-mask
< prev
next >
Wrap
Lisp/Scheme
|
1998-10-22
|
4KB
|
96 lines
hindemith-chord-mask chords mask
&key (type :rnd) (seed nil) (sub-groups '(0 0)))
type can be :rnd or :ord
This function which is the latest in the cadar module
and not quite finished analyses the chord-material
and divides it into groups as stated in Hindemiths
The craft of musical composition.
The theory divides chords into subgroups after tension
(or dissonans) amount.
To main subgroups (A and B) where chords without tritone
is A and chords with tritone is B.
Then there are subgroups depending on what other intervals
that are percent.
This function divides into this groups and reorder
the material after the mask which uses the function
change-order-mask which can use most kinds of material.
With type :rnd it picks randomly among the groups
matching the mask and with type :ord it picks in the
original order of the chords.
Sub-groups shifts what groups to pick within subgroups.
'(0 0) selects all sub-groups '(1 0) skips first sub-group
'(0 1) skips last sub-group '(2 2) skips first two and last two
sub-groups . . .
if no group matches returns nil.
seed works only with type :rnd and control the
random-generator.
To decide if chords are in root position which is needed
for some of the groups the function get-chord-roots is used.
get-chord-roots is also based on Hindemith theory and uses
his series2 to make its choices.
series2 says that the most dominant interval is the fifth.
so if a fifth is percent it takes the lowest note of the
fifth as root. if more than one fifth is percent it takes
the lowest of them.
next strongest interval is a fourth a if a fourth is percent
then the top note is the root.
then it keeps on thru the rest of the intervals.
So the idea with the function is to reorder chords after
a mask to shape the tension which can be useful for randomly
produced material.
To get the best result a large amount of material is needed
so that all the different groups will be represented.
If only one or two groups is percent it can't make so many
choices.
If the chords don't fit after reordering you can always
transpose chords without loosing the tension-curve.
The function works (for the moment) only with chromatic
material and not with pauses or single notes but you can
always use convert-to-chromatic to convert it and then
with change-to-new-tonality convert it back again.
A few examples:
(setq chords '(aeh adi ach acf aei aek adhj agk aegk aehkn aegl adg))
(setq chords2 (append chords (symbol-transpose 4 chords)))
->(aeh adi ach acf aei aek adhj agk aegk aehkn aegl adg eil ehm egl egj eim eio ehln eko eiko eilor eikp ehk)
(setq mask (gen-noise-white 34 1.0 0.5))
-> lots of numbers
(hindemith-chord-mask chords2 mask :seed 0.618)
->(egl aei adg adg eim adhj egl eiko aegl acf egj ehm ehln eio eko aegl aeh aek aeh aehkn aehkn agk aegk ehm)
(hindemith-chord-mask chords2 mask :type :ord)
->(egl eim ehk adg aei ehln ach eiko eikp egj acf ehm adhj eio eko aegl eil aek aeh eilor aehkn agk aegk adi)
(hindemith-chord-mask chords2 mask :seed 0.1
:sub-groups '(1 1))
->(egl aei adg adg aei ehln egl eiko aegl acf acf ehm ehln eio eko aegl ehm eio ehm aehkn aehkn eko eiko eio)
(hindemith-chord-mask chords2 mask :seed 0.1
:sub-groups '(2 2))
->(egl aei adg adg aei eko egl eiko aegl acf acf eio eko ehln eko aegl eio ehln eio aehkn aehkn eiko eiko ehln)
(hindemith-chord-mask chords2 mask :seed 0.1
:sub-groups '(3 3))
->(egj aei adg adg aei eiko egj egl aegl acf aehkn ehln eiko eko eiko aegl ehln eko ehln aehkn aehkn egl egl eko)